home *** CD-ROM | disk | FTP | other *** search
- /*
- File: FinderDragPro.h
-
- Description: Sample file illustrating drag and drop techniques for use
- with file system objects. This file illustrates how applications
- can use drag and drop commands in a way compatible with current
- and past versions of the Finder.
-
- Author: John Montbriand
-
- Copyright: Copyright: © 1999 by Apple Computer, Inc.
- all rights reserved.
-
- Disclaimer: You may incorporate this sample code into your applications without
- restriction, though the sample code has been provided "AS IS" and the
- responsibility for its operation is 100% yours. However, what you are
- not permitted to do is to redistribute the source as "DSC Sample Code"
- after having made changes. If you're going to re-distribute the source,
- we require that you make it clear in the source that the code was
- descended from Apple Sample Code, but that you've made changes.
-
- Change History (most recent first):
- 9/9/99 by John Montbriand
- */
-
- #ifndef __FINDERDRAGPRO__
- #define __FINDERDRAGPRO__
-
- #include <MacTypes.h>
- #include <Drag.h>
-
- /* apple menu constants */
- enum {
- mApple = 128,
- iAbout = 1,
- iFirstAppleItem = 3
- };
-
- /* file menu constants */
- enum {
- mFile = 129,
- iNew = 1,
- iOpen = 2,
- iClose = 3,
- iSave = 5,
- iSaveAs = 6,
- iRevert = 7,
- iPageSetup = 9,
- iPrint = 10,
- iQuit = 12
- };
-
- /* edit menu constants */
- enum {
- mEdit = 130,
- iUndo = 1,
- iCut = 3,
- iCopy = 4,
- iPaste = 5,
- iClear = 6
- };
-
- enum { /* the main menu bar resource */
- kFDPMenuBarResource = 128
- };
-
- /* main window dialog constants */
- enum {
- kFDPDialogResource = 128,
- kFDPUserItem = 1,
- kFDPhfsItem = 2,
- kFDPpromiseItem = 3,
- /* kUsePromiseHFS and kUseRegularHFS are used for
- internal tracking of the state of the kFDPhfsItem and
- the kFDPpromiseItem dialog controls. */
- kUsePromiseHFS = 100, /* output promise hfs flavors in drags */
- kUseRegularHFS = 101,/* output hfs flavors in drags */
- kFDPDragItemID = 392 /* item identifier for our drags */
- };
-
- enum { /* picture displayed when selection is empty */
- kFDPSpashPictResource = 128
- };
-
- /* constants for the copy progress dialog */
- enum {
- kCopyProgressTicksOffset = 50, /* 50 ticks before the progress box pops up */
- kCopyProgressDialog = 130,
- kPlainCopyProgressDialog = 131,
- kCProCancelItem = 1,
- kCProIndicatorItem = 2
- };
-
- /* alert id numbers */
- enum {
- kCannotCopyDirAlert = 132,
- kCopyFailedAlert = 133,
- kDragFailedAlert = 134,
- kOpenAppFailedAlert = 135,
- kMainFailedAlert = 136,
- kAboutBoxAlert = 137,
- kNoDragManagerAlert = 138,
- kNoThreadManagerAlert = 139
- };
-
-
- /* promise flavor types */
- enum {
- kPromisedFlavor = 'fssP', /* default promise */
- kPromisedFlavorFindFile = 'rWm1' /* Find File promise -- special case */
- };
-
- /* internal error codes. Operating system errors are
- negative. We use positive ones for our own internal errors. */
- enum {
- kNoDragMgrError = 1235, /* drag manager not installed */
- kNoThreadMgrError = 1236 /* thread manager not installed */
- };
-
- enum {
- /* sleep value passed to WaitNextEvent. Normally
- we'll delay for 1 second between events, unless
- we're performing a file copy. */
- kNormalSleepTime = (1*60), /* normal operation -> 1 second */
- kCopySleepTime = 0 /* during copies -> return as soon as possible */
- };
-
-
- /* routine prototypes */
-
- /* ProcessNextEvent calls WaitNextEvent to get the next event and then it passes
- the event along to the HandleNextEvent routine. sleepTime is passed to the
- WaitNextEvent routine in the sleep parameter. */
- void ProcessNextEvent(long sleepTime);
-
-
- /* ParamAlert is a general alert handling routine. If Apple events exist, then it
- calls AEInteractWithUser to ensure the application is in the forground, and then
- it displays an alert after passing the s1 and s2 parameters to ParamText. */
- short ParamAlert(short alertID, StringPtr s1, StringPtr s2);
-
-
- /* SetNewDisplay is called to set the file or folder being displayed in the main window.
- Here, structures are deallocated and an alias is saved referring to the file.
- SetNewDisplay is called from the drag receive handler and since it is not
- safe to call "GetIconSuiteFromFinder()" from inside of the drag receive handler
- (it uses apple events), the flag gFileUpToDate is used to defer that operation
- until the next time ValidateFDPWindowDisplay. ValidateFDPWindowDisplay is
- called from the main loop. If targetFile is NULL, then the display is cleared. */
- void SetNewDisplay(HFSFlavor *targetFile);
-
-
- #endif
-